<?php /** 数据库连接, 操作类 **/
require_once 'SQLBuilder.php';
class DBUtils{
    /** 构造器私有 **/
    private function __construct(){}
    /** 防止克隆 **/
    private function __clone(){}
    /** 数据库连接参数 **/
    private const URL = "localhost";
    private const DATABASE = "php";
    private const USERNAME = "root";
    private const PASSWORD = "root";
    /** 数据库连接对象 **/
    private static mysqli $link;

    /** 获取sql生成器 *
     * @param string $table
     * @return SQLBuilder
     * @throws Exception
     */
    public static function getSql(string $table): SQLBuilder{
        return new SQLBuilder($table);
    }

    /** 数据库初始化方法 **/
    public static function init(){
        /** 获取连接 **/
        DBUtils::$link = @mysqli_connect(DBUtils::URL,
                                DBUtils::USERNAME,
                                DBUtils::PASSWORD,
                                DBUtils::DATABASE);
        /** 修改数据库连接的字符集 **/
        mysqli_query(DBUtils::$link, "set names utf8");
    }

    /** 数据库查询方法(关联数组): 查询结果为1条 **/
    public static function queryOne($sql): array{
        $result = mysqli_query(DBUtils::$link, $sql);
        if( is_bool($result) ){
            echo $sql;
            throw new Exception("sql语句可能写错了");
        }
        return @mysqli_num_rows($result) ? mysqli_fetch_assoc($result) : array();
    }

    /** 数据库查询的方法(关联数组): 查询结果为多条, 封装到一个数组中 **/
    public static function queryMulti($sql): array{
        $result = mysqli_query(DBUtils::$link, $sql);
        $dataArr = array();
        while( $data = mysqli_fetch_assoc($result) ){
            $dataArr[] = $data;
        }
        return $dataArr;
    }

    /** 数据库 `增删改` 的方法(单条): 返回是否成功 **/
    public static function execute($sql): bool{
        return mysqli_query(DBUtils::$link, $sql);
    }

    /** 数据库资源关闭 **/
    public static function close(): void{
        mysqli_close(DBUtils::$link);
    }
}